In a cloud, datacenter, or virtual desktop infrastructure environment, numerous virtual machines (VMs) may be in use and new VMs are provisioned at regular intervals. The new VMs are provisioned with various guest operating system (OS) images and versions of software. In addition, existing VMs are often in need of regular software updates and upgrades. It is often a large and complicated task to install and configure various virtual machine tools in the guest OSs according to the guest OSs' native supported drivers.
Currently, software for the VMs is installed or upgraded after powering on the VM, while the VM is running. However, this process can require a number of minutes to complete, and therefore a user must wait for the software upgrades to occur. In addition, software installations or upgrades often require a reboot of the VM, which increases the wait time before the VM can be used.